package cn.hinglo.gameclaw.client.service;

import cn.hinglo.gameclaw.client.dao.UserInfoClientDao;
import cn.hinglo.gameclaw.data.entity.Result;
import cn.hinglo.gameclaw.data.utils.*;
import cn.hinglo.gameclaw.user.bean.UserInfo;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import static cn.hinglo.gameclaw.data.utils.FieldUtils.IMAGE_4;


/**
 * @createTime: 2018/1/9
 * @author: HingLo
 * @description: 用户信息管理
 */
@Service
public class UserInfoClientService {
    /**
     * 昵称
     */
    private static final int NIKE_NAME = 1;
    /**
     * 性别
     */
    private static final int SEX = 2;
    private final UserInfoClientDao userInfoClientDao;

    @Autowired
    public UserInfoClientService(UserInfoClientDao userInfoClientDao) {
        this.userInfoClientDao = userInfoClientDao;
    }

    /**
     * 用户信息查询
     *
     * @param userId 用户的Id
     * @return 用户信息
     */
    public UserInfo userInfoService(String userId) {
        UserInfo userInfo = userInfoClientDao.selectByPrimaryKey(userId);
        String header = userInfo.getHeader();
        if (!StrUtil.startWith(header, FieldUtils.PREFIX)) {
            userInfo.setHeader(CommonUtils.imgInstall(header, IMAGE_4));
        }
        return userInfo;
    }

    /**
     * 根据指定的类型修改用户信息
     *
     * @param userId 用户的Id
     * @param type   修改的类型
     * @param value  修改的值
     * @return 返回修改结果
     */
    public Result updateUserInfoService(String userId, int type, String value) {
        UserInfo userInfo = new UserInfo().setUserId(userId);
        //修改nikeName
        if (type == NIKE_NAME) {
            userInfo.setNikeName(Convert.toStr(value));

        } else if (type == SEX) {
            //修改性别
            userInfo.setSex(Convert.toInt(value));
        } else {
            return ResultUtils.error("修改类型不正确");
        }

        return userInfoClientDao.updateByPrimaryKeySelective(userInfo) > 0 ? ResultUtils.success() : ResultUtils.error("修改失败");
    }


    /**
     * update  header
     *
     * @param userId 用户的Id
     * @param header 头像信息
     * @return 修改结果
     */
    public Result updateUserInfoHeaderService(String userId, MultipartFile header) {

        String suffix = FileImageUtils.getSuffixUtils(header);
        //若果是图片格式保存
        if (FileImageUtils.suffixUtils(suffix)) {
            //生成文件的名称
            String fileName = IdUtils.getId() + suffix;
            //String url = FieldUtils.URL + "/user/i/image?type=" + IMAGE_4 + "&&subject=" + fileName;
            if (FileImageUtils.saveImageUtils(header, fileName, IMAGE_4)) {
                //更新数据库
                UserInfo userInfo = new UserInfo().setUserId(userId).setHeader(fileName);
                if (userInfoClientDao.updateByPrimaryKeySelective(userInfo) > 0) {
                    return ResultUtils.success();
                } else {
                    //插入是失败后，就删除上传好的文件
                    FileImageUtils.deleteImageUtils(fileName, IMAGE_4);
                }
            }
            return ResultUtils.error("头像更新失败");
        }
        return ResultUtils.error("文件格式不正确");

    }
}
